#include "bsp_battery_led.h"

static void LED_GPIO_init(rcu_periph_enum periph, uint32_t gpio_periph, uint32_t pin) {
    // 时钟
    rcu_periph_clock_enable(periph);
    // GPIO
    gpio_mode_set(gpio_periph, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, pin);
    gpio_output_options_set(gpio_periph, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, pin);
}
void battery_led_init() {
    LED_GPIO_init(LED1_RCU, LED1_GPIO);
    LED_GPIO_init(LED2_RCU, LED2_GPIO);
    LED_GPIO_init(LED3_RCU, LED3_GPIO);
    LED_GPIO_init(LED4_RCU, LED4_GPIO);
}
// 当前状态 为啥没有充电ing ?
uint8_t status = 0;// 0:stop  1:start  2:stoping

static uint8_t current_power = 0;
static uint8_t show_power = 0;

void battery_led_start(uint8_t power) {
    current_power = power;
    show_power = power;
    status = 1;
}
void battery_led_stop() {
    status = 2;
}

void battery_led_update(uint8_t power) {
    current_power = power;
}
void battery_led_loop() {
    if (status == 0) {
        LED1_OFF();
        LED2_OFF();
        LED3_OFF();
        LED4_OFF();
    } else if (status == 1) {

        show_power++;
        if (show_power > 4) {
            show_power = current_power;
        }
        // 亮前show_power个灯
        show_power >= 1 ? LED1_ON() : LED1_OFF();
        show_power >= 2 ? LED2_ON() : LED2_OFF();
        show_power >= 3 ? LED3_ON() : LED3_OFF();
        show_power >= 4 ? LED4_ON() : LED4_OFF();
    } else if (status == 2) {
        uint8_t i;
        // 当前电量闪三次
        for (i = 0; i < 3; i++) {
            LED1_OFF();
            LED2_OFF();
            LED3_OFF();
            LED4_OFF();
            delay_1ms(250);
            current_power >= 1 ? LED1_ON() : LED1_OFF();
            current_power >= 2 ? LED2_ON() : LED2_OFF();
            current_power >= 3 ? LED3_ON() : LED3_OFF();
            current_power >= 4 ? LED4_ON() : LED4_OFF();
            delay_1ms(250);
        }
        status = 0;
    }
}